/*
package com.shujia.flink.core


import org.apache.flink.streaming.api.scala._


object Demo1WordCount {
  def main(args: Array[String]): Unit = {
    //1、创建flink执行环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    //设置并行度,一个并行度对应一个task
    env.setParallelism(2)
    //数据从上游发送到下游的超时时间，默认是200毫秒
    env.setBufferTimeout(0)

    /**
     * 2、读取数据
     * 可以从socket中读取数据 (无界流)
     * nc -lk 8888
     *
     * DataStream: flink红的流编程的模型，是一个逻辑概念，里面没有数据
     */
    val linesDS: DataStream[String] = env.socketTextStream("master", 8888)
    /**
     * 3、统计单词的数量
     */
    //将一行转换成多行
    val wordsDS: DataStream[String] = linesDS.flatMap(line => line.split(","))
    //转换成kv格式
    val kvDS: DataStream[(String, Int)] = wordsDS.map(word => (word, 1))
    //按照单词分组
    val keyByDS: KeyedStream[(String, Int), String] = kvDS.keyBy(kv => kv._1)
    //统计每个单词的数量
    //sum底层就是有状态计算，会基于之前的结果进行计算
    val countDS: DataStream[(String, Int)] = keyByDS.sum(1)

    //打印结果
    countDS.print()

    //启动flink任务
    env.execute()
  }
}
*/
